package procsim;

import java.awt.*;

public class PaintInterrupts extends PaintTab {
    public PaintInterrupts(Paint parent) {
        super(parent);
        // Coordinates
        Design.PSWT.addCoords(this, 20, 40, 60, 40);
        Design.PRINM.addCoords(this, 20, 70, 60, 70).addCoords(this, Design.IOrLower.getUpper3Coords(40));
        Design.PRADR.addCoords(this, 20, 100, 60, 100).addCoords(this, Design.IOrLower.getMiddle3Coords(40));
        Design.PROPR.addCoords(this, 20, 130, 60, 130).addCoords(this, Design.IOrLower.getLower3Coords(40));
        Design.ICoderW.addCoords(this, 110, 170, 110, 150).addCoords(this, Design.IOrUpper.getUpper3Coords(40));
        Design.PRPER.addCoords(this, Design.IOrUpper.getMiddle3Coords(40)).addCoords(this, Design.IAnd2.getUpper2Coords(30));
        Design.INT.addCoords(this, 510, 300, 530, 300).addCoords(this, Design.IOrUpper.getLower3Coords(40)).addCoords(this, Design.IAnd3.getUpper2Coords(30));
        Design.PREKIDCompl.addCoords(this, Design.IOrUpper.getResCoords(40));
        Design.ack.addCoords(this, Design.IAnd1.getUpper2Coords(30)).addCoords(this, Design.IDecoder.getEnableCoords(10)).addCoords(this, Design.IAnd3.getLower2Coords(30));
        Design.ldPSWL.addCoords(this, Design.IAnd1.getResCoords(40));
        Design.ackINT.addCoords(this, Design.IAnd3.getResCoords(40));
        Design.IOrLowerResult.addCoords(this, Design.IOrLower.getResCoords(45));
        Design.IMMP1S0.addCoords(this, Design.IAnd2.getResCoords(45)).addCoords(this, 425, 120, 350, 120).addCoords(this, 350, 120, 350, 190).addCoords(this, 350, 190, 310, 190).addCoords(this, 425, 120, 425, 150).addCoords(this, 425, 150, 520, 150).addCoords(this, 520, 150, 520, 255).addCoords(this, 520, 255, 570, 255).addCoords(this, 425, 120, 425, 80).addCoords(this, 425, 80, 519, 80).addCoords(this, 519, 80, 519, 60).addCoords(this, Design.IAnd1.getLower2Coords(30));
        Design.IVTPout.addCoords(this, Design.IVTP.getOutCoords(30)).addCoords(this, 135, 390, 215, 390).addCoords(this, 215, 390, 215, 400);
        Design.ADRIVT.addCoords(this, Design.IAdd.getResCoords(30));
        Design.IR23_16.addCoords(this, 471, 220, 471, 250);
        Design.IMMP2Out.addCoords(this, 447, 351, 447, 409);
        Design.IMMP1Out0.addCoords(this, 523, 195, 570, 195);
        Design.IMMP1Out1.addCoords(this, 523, 225, 570, 225);
        Design.IDecoderOut0.addCoords(this, 670, 169, 700, 169);
        Design.ackPRINM.addCoords(this, 670, 185, 700, 185);
        Design.ackPRADR.addCoords(this, 670, 201, 700, 201);
        Design.ackPROPR.addCoords(this, 670, 217, 700, 217);
        Design.IDecoderOut4.addCoords(this, 670, 233, 700, 233);
        Design.ackPER1.addCoords(this, 670, 249, 700, 249);
        Design.ackPER2.addCoords(this, 670, 265, 700, 265);
        Design.ackPER3.addCoords(this, 670, 281, 700, 281);
        Design.prL0.addCoords(this, 288, 40, 288, 60);
        Design.prL1.addCoords(this, 253, 40, 253, 60);
        Design.ICoderOut0.addCoords(this, 160, 60, 185, 60);
        Design.ICoderOut1.addCoords(this, 160, 110, 185, 110);
        Design.IMMP1in0.addCoords(this, 193, 86, 223, 86).addCoords(this, 223, 86, 223, 140);
        Design.IMMP1in1.addCoords(this, 271, 62, 271, 140);
        Design.zero.addCoords(this, 470, 371, 470, 409);
        Design.Seven0.addCoords(this, 425, 371, 425, 409);
        Design.IADDin1.addCoords(this, 447, 411, 447, 450).addCoords(this, 447, 450, 330, 450).addCoords(this, 330, 450, 330, 390).addCoords(this, 330, 390, 295, 390).addCoords(this, Design.IAdd.getInBCoords(10));
        Design.Five0.addCoords(this, 235, 280, 235, 309);
        Design.IMMP1Out.addCoords(this, 246, 241, 246, 260).addCoords(this, 246, 260, 311, 260).addCoords(this, 311, 260, 311, 309);
        Design.IMMP1S0.addCoords(this, 273, 280, 273, 309).addCoords(this, 273, 280, 330, 280).addCoords(this, 330, 280, 330, 190);
        Design.IMMP2In.addCoords(this, 273, 311, 273, 350).addCoords(this, 273, 350, 353, 350).addCoords(this, 353, 350, 353, 220).addCoords(this, 353, 220, 423, 220).addCoords(this, 423, 220, 423, 250);

        // Collections
        elements.add(Design.ICoder);
        elements.add(Design.IDecoder);
        elements.add(Design.IMMP1);
        elements.add(Design.IMMP2);
        elements.add(Design.IAdd);
        elements.add(Design.IOrUpper);
        elements.add(Design.IOrLower);
        elements.add(Design.IAnd1);
        elements.add(Design.IAnd2);
        elements.add(Design.IAnd3);
        elements.add(Design.IVTP);

        lines.add(Design.PSWT);
        lines.add(Design.PRINM);
        lines.add(Design.PRADR);
        lines.add(Design.PROPR);
        lines.add(Design.PRPER);
        lines.add(Design.INT);
        lines.add(Design.ICoderW);
        lines.add(Design.PREKIDCompl);
        lines.add(Design.ack);
        lines.add(Design.ldPSWL);
        lines.add(Design.ackINT);
        lines.add(Design.IOrLowerResult);
        lines.add(Design.IMMP1S0);
        lines.add(Design.IVTPout);
        lines.add(Design.ADRIVT);
        lines.add(Design.IR23_16);
        lines.add(Design.IMMP2Out);
        lines.add(Design.IMMP1Out0);
        lines.add(Design.IMMP1Out1);
        lines.add(Design.ackPRINM);
        lines.add(Design.ackPRADR);
        lines.add(Design.ackPROPR);
        lines.add(Design.ackPER1);
        lines.add(Design.ackPER2);
        lines.add(Design.ackPER3);
        lines.add(Design.IDecoderOut0);
        lines.add(Design.IDecoderOut4);
        lines.add(Design.prL0);
        lines.add(Design.prL1);
        lines.add(Design.ICoderOut0);
        lines.add(Design.ICoderOut1);
        lines.add(Design.IMMP1in0);
        lines.add(Design.IMMP1in1);
        lines.add(Design.zero);
        lines.add(Design.Seven0);
        lines.add(Design.IADDin1);
        lines.add(Design.Five0);
        lines.add(Design.IMMP1Out);
        lines.add(Design.IMMP2In);
    }
    @Override
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D gnew = (Graphics2D)g;
        Util.saveGraphics(gnew);
        gnew.setColor(Color.GRAY);
        gnew.setStroke(new BasicStroke(1));

        gnew.drawLine(425, 40, 460, 40);

        gnew.setStroke(new BasicStroke(2));

        // grouping signals
        gnew.drawLine(188, 57, 190, 57); // -
        gnew.drawLine(190, 57, 190, 84); // |
        gnew.drawLine(190, 84, 192, 86); // /
        gnew.drawLine(192, 86, 190, 88); // \
        gnew.drawLine(190, 88, 190, 115); // |
        gnew.drawLine(188, 115, 190, 115); // -

        // grouping signals
        gnew.drawLine(246, 60, 246, 58); // |
        gnew.drawLine(246, 60, 269, 60); // -
        gnew.drawLine(269, 60, 271, 62); // /
        gnew.drawLine(271, 62, 273, 60); // \
        gnew.drawLine(273, 60, 296, 60); // -
        gnew.drawLine(296, 60, 296, 58); // |

        // grouping signals
        gnew.drawLine(420, 408, 420, 410); // |
        gnew.drawLine(420, 410, 445, 410); // -
        gnew.drawLine(445, 410, 447, 412); // /
        gnew.drawLine(447, 412, 449, 410); // \
        gnew.drawLine(449, 410, 476, 410); // -
        gnew.drawLine(476, 410, 476, 408); // |

        // grouping signals
        gnew.drawLine(228, 310, 228, 308); // |
        gnew.drawLine(228, 310, 271, 310); // -
        gnew.drawLine(271, 310, 273, 312); // /
        gnew.drawLine(273, 312, 275, 310); // \
        gnew.drawLine(275, 310, 318, 310); // -
        gnew.drawLine(318, 310, 318, 308); // |

        Util.restoreGraphics(gnew);
    }
}